---
title: 容器与外界互联互通
description: 容器的隔离特性在某些情况下可能成为负面特性，因为它限制了容器与外部环境的数据交互。
---

容器提供了进程隔离的特性，适用于运行简单应用如busybox或helloworld，然而，对于后台服务应用如Nginx、Redis、MySQL等，容器的完全隔离环境导致无法对外提供服务，使其失去了实际价值。因此，容器并不应该被视为完全封闭的解决方案，而应该提供一种机制，以便与外界进行数据交互，从而充分发挥其优势。
## 如何拷贝容器内的数据

Docker 提供的 `cp` 命令，可以在宿主机和容器之间拷贝文件，是最基本的一种数据交换功能。

使用这个命令需要先用 `docker run` 启动一个容器，这里使用 Redis：

```bash
[root@docker ~]# docker run -d --rm redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
a2abf6c4d29d: Pull complete
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
4da4a468b2d73ddbf2de91eeb7c04dcdd97a1c72a0b4bea0162be4627ee88bbd
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED              STATUS              PORTS      NAMES
4da4a468b2d7   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp   jolly_taussig

```
:::tip
这里使用了 `-d` 、`--rm` 两个参数，表示运行在后台，容器结束后自动删除，然后使用 `docker ps` 命令可以看到 Redis 容器正在运行。
:::

docker cp 的用法类似 Linux 的 cp、 scp,指定源路径( src path ) 和目标路径 (dest path) 就可以了。如果源路径是宿主机那么就把文件拷贝进容器，如果源文件是容器那么就是把文件拷贝出容器。注意使用容器名或者容器ID来指明是那个容器的路径。


假设当前目录下有一个 a.txt 的文件，现在我们要把它拷贝进 Redis 容器的 /tmp 目录，命令如下：
```bash
[root@docker ~]# docker cp a.txt 4da:/tmp/
Successfully copied 2.048kB to 4da:/tmp/
```v
